`:top
En `F33f`_`[informatique`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Informatique]`_`f, le `!code source`! est un `F33f`_`[texte`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Texte]`_`f qui présente les `F33f`_`[instructions`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Instruction_informatique]`_`f composant un programme sous une forme lisible, telles qu'elles ont été écrites dans un `F33f`_`[langage de programmation`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_de_programmation]`_`f. Le code source se matérialise généralement sous la forme d'un ensemble de `F33f`_`[fichiers texte`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Fichier_texte]`_`f.
Le code source est souvent traduit — par un `F33f`_`[assembleur`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Assembleur]`_`f ou un `F33f`_`[compilateur`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Compilateur]`_`f — en `F33f`_`[code binaire`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Système_binaire]`_`f composé d'instructions exécutables par le `F33f`_`[processeur`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Processeur]`_`f. Il peut sinon être directement `F33f`_`[interprété`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Interprète_(informatique)]`_`f à l'exécution du programme. Dans ce deuxième cas, il est parfois traduit au préalable en un `F33f`_`[code intermédiaire`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Bytecode]`_`f dont l'interprétation est plus rapide.
>>Contents
• `F0af`_`[Dénomination`#d-nomination]`_`f
• `F0af`_`[Histoire`#histoire]`_`f
• `F0af`_`[Principe`#principe]`_`f
• `F0af`_`[Types de code sources`#types-de-code-sources]`_`f
• `F0af`_`[Coloration syntaxique`#coloration-syntaxique]`_`f
• `F0af`_`[Analogie avec la recette de cuisine`#analogie-avec-la-recette-de-cuisine]`_`f
• `F0af`_`[Aspects légaux`#aspects-l-gaux]`_`f
• `F0af`_`[Notes et références`#notes-et-r-f-rences]`_`f
• `F0af`_`[Voir aussi`#voir-aussi]`_`f
• `F0af`_`[Articles connexes`#articles-connexes]`_`f
-─
>>Dénomination
L'expression est une traduction de l'anglais `*source code`*`:cite-ref-1[`F5bf`_`[1`#cite-note-1]`_`f]. Les expressions omettant le terme de `*code`* sont communes : `!les sources`!, `!le source`!.
>>Histoire
Dans les premiers temps de l'informatique, les programmes étaient entrés dans la `F33f`_`[mémoire`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Mémoire_vive]`_`f de l'ordinateur par l'intermédiaire des interrupteurs du pupitre de commande. Les `F33f`_`[instructions machines`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Instruction_informatique]`_`f, compréhensibles par l'ordinateur, ne pouvaient être saisies qu'en `F33f`_`[code binaire`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Code_binaire]`_`f. Ce qui ne convenait qu'à de tout petits programmes.
Ils ont ensuite été chargés depuis des `F33f`_`[bandes perforées`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Carte_perforée]`_`f, puis des `F33f`_`[cartes perforées`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Carte_perforée]`_`f.
Très rapidement, les programmes ont été rédigés dans un langage symbolique, `F33f`_`[langage d'assemblage`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_d'assemblage]`_`f ou langage évolué comme `F33f`_`[Fortran`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Fortran]`_`f, `F33f`_`[Cobol`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Cobol]`_`f, puis traduit automatiquement par un programme (`F33f`_`[assembleur`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Assembleur]`_`f, `F33f`_`[compilateur`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Compilateur]`_`f).
Avec l'apparition des disques magnétiques et des consoles interactives, des éditeurs de lignes puis des `F33f`_`[éditeurs de textes`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Éditeur_de_texte]`_`f ont été utilisés pour taper et modifier le code source.
Les possibilités limitées des ordinateurs de l'époque nécessitaient souvent l'impression du code source sur papier continu (en) avec des bandes Carol.
Aujourd'hui, il existe des environnements de développement, dits `F33f`_`[Environnement de développement intégré`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Environnement_de_développement_intégré]`_`f (IDE, `*Integrated Development Environment`*), qui intègrent notamment les tâches d'édition et de compilation.
>>Principe
>>>Types de code sources
Un logiciel est une suite d'instructions données à une machine`:cite-ref-2[`F5bf`_`[2`#cite-note-2]`_`f]`:cite-ref-3[`F5bf`_`[3`#cite-note-3]`_`f]`:cite-ref-4[`F5bf`_`[4`#cite-note-4]`_`f]. Un processeur ne peut exécuter que des instructions représentées sous une forme binaire particulière. Sauf mécanismes expérimentaux, il n'est pas possible pour un être humain de saisir directement un code binaire dans la représentation qu'en attend le processeur : un être humain ne peut pas écrire directement les champs de bits aux adresses attendues. Il est obligé de passer par un code distinct appelé code source, et qui est par la suite traduit dans la représentation binaire attendue par la machine puis chargé et exécuté par la cible.
Toutefois, l'écriture d'un code sous forme binaire, même dans un fichier séparé, pose de nombreux problèmes de compréhension aux êtres humains. C'est une représentation uniquement constituée d'une suite ininterrompue de 0 et de 1 qui est difficile à lire, à écrire et à maintenir sans assistance technique. La diversité des microprocesseurs et des composants présents dans un ordinateur ou automate, implique qu'un code binaire généré pour un système ne puisse pas être `*a priori`* le même que sur une machine distincte. Aussi, il existe autant de codes binaires que de configurations et une complexité accrue excluant que l'être humain puisse concevoir simplement un code binaire de grande ampleur.
Pour éviter ces écueils, et puisqu'une traduction est toujours nécessaire, l'être humain écrit un code textuel afin qu'il soit plus lisible, plus compréhensible et plus simple à maintenir : c'est le code source écrit dans un `F33f`_`[langage de programmation`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_de_programmation]`_`f. Il est, dans la plupart des cas, plus lisible, plus simple à écrire et indépendant du système cible. Un programme tiers (`F33f`_`[compilateur`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Compilateur]`_`f, `F33f`_`[interpréteur`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Interprète_(informatique)]`_`f ou `F33f`_`[machine virtuelle`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Machine_virtuelle]`_`f) se charge de la traduction du code source en code binaire exécutable par la cible.
Le code généré par l'être humain est appelé `*code source`* ; la façon dont est rédigé ce `*code source`* est appelée `F33f`_`[langage de programmation`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_de_programmation]`_`f ; le traducteur de ce code dans sa représentation binaire est appelé `F33f`_`[compilateur`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Compilateur]`_`f, `F33f`_`[interpréteur`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Interprète_(informatique)]`_`f ou `F33f`_`[machine virtuelle`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Machine_virtuelle]`_`f selon les modalités de la traduction.
Dans la plupart des langages, on peut distinguer différents éléments dans un code source :
• les éléments décrivant l’algorithme et les données (le code source proprement dit) :
• des symboles `F33f`_`[identifiant`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Identificateur]`_`f des variables, des `F33f`_`[mots clefs`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Mot_clef]`_`f dénotant des instructions, des représentations de données ;
• des constantes littérales.
• les commentaires, qui documentent le code source le plus souvent en langage naturel, destinés aux relecteurs du code source. Ils ne sont pas nécessaires à la production du code exécutable mais peuvent être utilisés par le compilateur pour, par exemple, produire automatiquement de la documentation.
>>>Coloration syntaxique
Un code est plus facile à lire et à écrire avec un éditeur fournissant une `F33f`_`[coloration syntaxique`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Coloration_syntaxique]`_`f permettant de distinguer les différents éléments du code source. Les commentaires peuvent par exemple être mis en vert.
Exemple de code en `F33f`_`[Ruby`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Ruby]`_`f :
`B100`F9d9a = "\\nThis is a double quoted string\\n"`f`b
`B100`F9d9`f`b
`B100`F9d9a = %Q{\\nThis is a double quoted string\\n}`f`b
`B100`F9d9`f`b
`B100`F9d9a = <<BLOCK`f`b
`B100`F9d9This is a double quoted string`f`b
`B100`F9d9This is a double quoted string`f`b
`B100`F9d9BLOCK`f`b
`B100`F9d9`f`b
`B100`F9d9a = %/\\tThis is a double quoted string\\n/`f`b
Autre exemple de code en Ruby :
`B100`F9d9hash = { :water => 'wet', :fire => 'hot' }`f`b
`B100`F9d9puts hash[:fire] # Τυπώνει: hot`f`b
`B100`F9d9`f`b
`B100`F9d9hash.each_pair do |key, value| # Ή: hash.each do |key, value|`f`b
`B100`F9d9 puts "#{key} is #{value}"`f`b
`B100`F9d9end`f`b
`B100`F9d9`f`b
`B100`F9d9# Τυπώνει: water is wet`f`b
`B100`F9d9# fire is hot`f`b
`B100`F9d9`f`b
`B100`F9d9hash.delete :water # Σβήνει το :water => 'wet'`f`b
`B100`F9d9hash.delete_if {|key,value| value=='hot'} # Σβήνει το :fire => 'hot'`f`b
Autre exemple de code en Ruby :
`B100`F9d9 File.open('file.txt', 'w') {|file| # открытие файла «file.txt» для записи («w» - write)`f`b
`B100`F9d9 file.puts 'Wrote some text.'`f`b
`B100`F9d9 } # Конструкция устраняет неопределённость с закрытием файла: закрывается здесь при любом исходе`f`b
>>Analogie avec la recette de cuisine
L'analogie du code source et de la `F33f`_`[recette de cuisine`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Recette_de_cuisine]`_`f est souvent employée dans une volonté de `F33f`_`[vulgarisation`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Vulgarisation]`_`f. Une recette est une liste organisée d'ingrédients dont les quantités et les fonctions sont définies. Le but est d'obtenir le résultat voulu par le cuisinier, selon une `F33f`_`[technique`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Technique]`_`f et un enchaînement d'opérations déterminés.
Ainsi le code source peut être apparenté à une recette de cuisine.
Ainsi, une personne dégustant un plat est en mesure de deviner les ingrédients qui le composent et d'imaginer comment le réaliser. Néanmoins, pour un plat très raffiné et subtil (comme pourrait l'être un programme), il est fort probable qu'elle ignore le mode opératoire du cuisinier. Pour le connaître, une recette détaillée serait nécessaire (pour un programme, la recette peut compter plusieurs millions de lignes de code). La solution alternative à cela serait d'acheter des plats préparés, c'est un peu ce que l'on fait lorsqu'on achète des logiciels.
>>Aspects légaux
Le code source peut être public ou privé (voir `F33f`_`[logiciel libre`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Logiciel_libre]`_`f et `F33f`_`[logiciel propriétaire`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Logiciel_propriétaire]`_`f). Toutefois, le code binaire n'étant qu'une traduction du code source, il est toujours possible d'étudier un logiciel à partir de son code binaire. La légalité des techniques utilisées à ces fins dépend du pays et de l'époque. Elle peut notamment être mise en œuvre pour percer les `F33f`_`[secrets`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Secret]`_`f d'une machine comme l'`F33f`_`[ES3B`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=ES3B]`_`f.
Le logiciel est couvert par le `F33f`_`[droit d'auteur`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Droit_d'auteur]`_`f en France depuis 1985 et en `F33f`_`[Union européenne`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Union_européenne]`_`f depuis 1991 et peut être considéré comme `F33f`_`[œuvre de l'esprit`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Œuvre_de_l'esprit]`_`f, ce qui permettrait de le soumettre à un `F33f`_`[monopole`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Monopole]`_`f. Le `F33f`_`[mouvement du logiciel libre`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Mouvement_du_logiciel_libre]`_`f et le mouvement de la `F33f`_`[Science ouverte`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Science_ouverte]`_`f promeuvent au contraire une diffusion sous `F33f`_`[licence libre`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Licence_de_libre_diffusion]`_`f. La directive européenne sur les données ouvertes ne concerne pas les logiciels informatique mais laisse la possibilité aux pays membre de les y intégrer. La `F33f`_`[France`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=France]`_`f considère ainsi une définition plus ouvert et, lorsqu'il est développé dans le cadre d'une `F33f`_`[mission de service public`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Mission_de_service_public]`_`f, le code source logiciel peut faire l'objet d'une demande à la `F33f`_`[commission d'accès documents administratifs`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Commission_d'accès_aux_documents_administratifs]`_`f`:cite-ref-5[`F5bf`_`[5`#cite-note-5]`_`f].
>>Notes et références
`:cite-note-1`!1.`! `F0af`_`[↑`#cite-ref-1]`_`f `:2020`a« Code source : définition, traduction », sur journaldunet.fr, 28 janvier 2020 (consulté le 9 août 2024)
`:cite-note-2`!2.`! `F0af`_`[↑`#cite-ref-2]`_`f « Code source - Définition de Code source » [html], sur dicodunet.com (consulté le 9 août 2024)
`:cite-note-3`!3.`! `F0af`_`[↑`#cite-ref-3]`_`f `:2023`a« Code source », sur tech-lib.fr, 17 février 2023 (consulté le 9 août 2024)
`:cite-note-4`!4.`! `F0af`_`[↑`#cite-ref-4]`_`f `:2022`a« Code source », sur conceptoit.net, 30 mars 2022 (consulté le 9 août 2024)
`:cite-note-5`!5.`! `F0af`_`[↑`#cite-ref-5]`_`f `:cl-ment-fontaine2024`a`:m-lanie-cl-ment-fontaine2024`aMélanie Clément-Fontaine, « Le cadre juridique des codes sources et des logiciels en Science ouverte », `*Revue Lamy Droit de l’immatériel`*, no 210, 1er janvier 2024, p. 4-5 (`F33f`_`[HAL`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=HAL_(archive_ouverte)]`_`f hal-05009877, lire en ligne [PDF])
>>Voir aussi
>>>Articles connexes
• `F33f`_`[Langage machine`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_machine]`_`f
• `F33f`_`[Logiciel propriétaire`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Logiciel_propriétaire]`_`f
• `F33f`_`[Logiciel libre`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Logiciel_libre]`_`f
• `F33f`_`[Open source`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Open_source]`_`f
• `F33f`_`[Shared Source`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Shared_Source]`_`f
• `F33f`_`[Compilateur`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Compilateur]`_`f
• `F33f`_`[Génération de code source`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Génération_de_code_source]`_`f
• `F33f`_`[Logiciel de gestion de versions`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Logiciel_de_gestion_de_versions]`_`f
• `F33f`_`[Gestion de configuration logicielle`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Gestion_de_configuration_logicielle]`_`f
• `F33f`_`[Gestion de configuration`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Gestion_de_configuration]`_`f
• `F33f`_`[Études critiques du code`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Études_critiques_du_code]`_`f
• Portail de la programmation informatique
`c`F0af`_`[↑ Back to top`#top]`_`f`a